The security of computing resources and associated data is of high importance in many contexts. As an example, networks of computing devices may be utilized to provide a robust set of services to their users. Within a network, a first computer, system, or user may trust a second computer, system, or user—that is, the computer, system, or user may be privileged with certain access rights such as the ability to create, read, update, and/or delete data of the first computer, system, or user. The second computer, system, or user may also be trusted to store data associated with the first computer, system, or user. As an example, a first computer, system, or user may trust a certificate authority with storing a public key and signing a digital certificate that certifies ownership of the public key. Conversely, there may be other computers, systems, or users that are untrusted and do not have the access rights or privileges of a trusted computer, system, or user. Additionally, there may exist a partially trusted computer, system, or user that has some access rights or privileges associated with a trusted computer, system, or user. With such configurations of computing resources, ensuring that access to the resources and the data is managed correctly can be challenging, especially as the size and complexity of such configurations grow.
Modern cryptographic algorithms provide high levels of data security. Current encryption methods, for example, can secure data such that unauthorized access to the data requires an impractical amount of time and/or resources. Such high-levels of protection, however, come at a cost. Generally speaking, higher levels of protection require greater levels of care and greater expenditures of computational resources. Furthermore, higher levels of protection may also require greater levels of trust in one or more subcomponents—for example, in a cryptography service or a certificate authority. Ensuring cryptographically protected communication between two or more parties may be difficult, especially in systems where it may be advantageous to reduce the use of computational resources or limit the amount of trust granted to various subcomponents of a network.